/*
 * @Description: 1:计算数组中元素出现的次数
 * @Author: xuexd
 * @Date:  2024-06-14 16:47:24
 */

// let array = ["name", "lisi", "age", "iphone", "assage", "name", "zhangsan"];
// const countOccurrences = array.reduce(
//   (acc, cur) => (acc[cur] ? acc[cur]++ : (acc[cur] = 1), acc),
//   {}
// );
// console.log(countOccurrences);
// 输出：{ name: 2, lisi: 1, age: 1, iphone: 1, assage: 1, zhangsan: 1 }
/*
 * @Description: 2:平级数据转化为树型结构（递归）
 * @Author: xuexd
 * @Date:  2024-06-14 16:47:02
 */
// const flatMenuData = [
//   { id: 1, name: "菜单1", parentId: 0 },
//   { id: 2, name: "子菜单1", parentId: 1 },
//   { id: 3, name: "子菜单2", parentId: 1 },
//   { id: 4, name: "菜单2", parentId: 0 },
//   { id: 5, name: "子菜单3", parentId: 4 },
// ];

// function buildTree(items) {
//   let map = {};
//   let node,
//     roots = [],
//     i;

//   // 第一步：创建一个哈希映射，用于快速查找节点
//   for (i = 0; i < items.length; i += 1) {
//     map[items[i].id] = i; // 初始化映射
//     items[i].children = []; // 初始化子节点数组
//   }

//   // 第二步：组装树形结构
//   for (i = 0; i < items.length; i += 1) {
//     node = items[i];
//     // 如果parentId为0，表示它是根节点
//     if (node.parentId === 0) {
//       roots.push(node);
//     } else {
//       // 否则，找到其父节点，并将其添加到父节点的children数组中
//       items[map[node.parentId]].children.push(node);
//     }
//   }

//   // 返回根节点数组
//   return roots;
// }

// // 使用函数转换数据
// const treeMenuData = buildTree(flatMenuData);

// // 打印结果（为了可读性，这里使用了JSON.stringify和缩进）
// console.log(JSON.stringify(treeMenuData, null, 2));
